package com.javaclimb.filmbuy.service;

import cn.hutool.crypto.SecureUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.javaclimb.filmbuy.common.ResultCode;
import com.javaclimb.filmbuy.dao.UserInfoDao;
import com.javaclimb.filmbuy.entity.UserInfo;
import com.javaclimb.filmbuy.exception.CustomException;
import com.javaclimb.filmbuy.vo.UserInfoVo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/*
* 用户信息service层
* */
@Service
public class UserInfoService {

    @Resource
    private UserInfoDao userInfoDao;

    /*
    * 增加一个用户
    * */
    public UserInfo add(UserInfo userInfo){
        //设置默认密码是123456
        userInfo.setPassword(SecureUtil.md5("123456"));
        userInfoDao.insertSelective(userInfo);
        return userInfo;
    }

    /*
    * 根据主键id删除一个用户
    * */
    public void delete(Long id){
        userInfoDao.deleteByPrimaryKey(id);
    }

    /*
    * 更新一个用户
    * */
    public void update(UserInfo userInfo){
        userInfoDao.updateByPrimaryKeySelective(userInfo);
    }

    /*
    * 根据主键id查询一个用户
    * */
    public UserInfo findById(Long id){
        return userInfoDao.selectByPrimaryKey(id);
    }

    /*
     * 判断用户名和密码是否正确
     * */
    public UserInfo login(String username, String password){
        UserInfoVo userInfoVo = userInfoDao.findByUsername(username);
        // 没找到
        if(userInfoVo == null){
            throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
        }
        // 密码错误
        if(!SecureUtil.md5(password).equals(userInfoVo.getPassword())){
            throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
        }
        return userInfoVo;
    }

    /**
     * 根据用户名模糊查询用户对象列表，分页查询
     * @param name 用户名，不是必选项
     * @param pageNum 要查询第几页
     * @param pageSize 每页多少条数据
     * @return 用户信息列表
     */
    public PageInfo<UserInfoVo> findPage(String name, Integer pageNum, Integer pageSize){
        PageHelper.startPage(pageNum,pageSize);
        List<UserInfoVo> byName = userInfoDao.findByName(name);
        return PageInfo.of(byName);
    }

    //根据用户名查找一个用户对象
    public UserInfo findByUserName(String name){
        return userInfoDao.findByUsername(name);
    }

    /**
     * 普通用户总数
     */
    public Integer count(){
        return userInfoDao.count();
    }
}












